// 被浏览器加载的js代码可以使用浏览器的 console 选项卡实现和JAVA一样的控制输出
// JS语法中内置 console 对象,用于调用输出方法,在控制台中进行结果输出
// JS的语句具有两种语句分割方式,可以定义;表示语句结束,可以定义换行表示语句结束
console.log("文本输出");console.log("文本输出2");
console.log("语句输出")
console.info("提示文本输出")
console.warn("警告输出")
console.error("错误输出")
// JS的控制输出语句接收的都是可边长参数,多个参数直接以空格分割
console.log("文本1","文本2","文本3")

// 1. 变量
// 1.1 变量的声明
//      JS 语法在 2015 发布 ES6 语法规范,该规范是JS的历史性的转折规范
//          ES6 => ECMAScript2015
//      JS 变量声明 固定变量声明关键字 变量名 = 变量值;
//          => JS 是一个弱类型语言 : 只有在变量被使用时,变量类型才会确定
//          => java 是一个强类型语言 : 声明变量时就已经确定变量类型
//      ES5 变量声明 var 变量名 = 变量值;
//      ES6 变量声明 let 变量名 = 变量值;
//                  const 变量名 = 变量值;
var name = "变量1";
let msg = "变量2";
const info = "变量3";
console.log( name,msg,info )
// var 和 let 的区别
//  let 的 三大特性 : 不可重复声明 ，必须先声明再使用(没有变量提升) ， 块作用域【循环时说明】
var arg = "arg变量1";
console.log(arg)
var arg = "arg变量2";
console.log(arg)
// 下述语句浏览器提示 Uncaught SyntaxError: Identifier 'arg' has already been declared
// let arg = "arg1变量3";
let arg1 = "arg1变量3"

// 在JS加载37行代码时，发现37行之前没有text变量，向下发现38 存在text,将text声明提到37之前，默认值undefined
console.log(text)
var text = "text变量";

// 下述代码报错 Uncaught ReferenceError: Cannot access 'text1' before initialization
// console.log(text1);
// let text1 = "text1变量";

// const 和 let 的区别
//      const 具有 let的所有特性，并多一条，不能重复赋值，const表示常量
let username = "admin";
console.log(username)
username = "jack";
console.log(username)

const info2 = "常量值";
console.log(info2)
// 下述代码会提示 Uncaught TypeError: Assignment to constant variable.
// info2 = "常量值2";

// 2. js的数据类型
//  + 基本数据类型 ：number string boolean
let num = 100;
let num1 = 100.1;
console.log(num,num1)
let str1 = '字符串';
let str2 = "字符串";
let str3 = `字符串`;
console.log(str1,str2,str3)
let flag1 = true;
let flag2 = false;
console.log(flag1,flag2)
//  + 特殊数据类型[取值]
let arg2 = null; // 表示数据为空
console.log(arg2)
let arg3 = undefined; // 等同于 let arg3;
console.log(arg3)
let arg4 = NaN; // not a number 表示该取值不是一个数值
                // NaN 这个值是 数值类型
let arg5 = Infinity; // 数值无穷大
//  + 引用数类型(复合类型)
let obj = new Object(); // 对象
let arr = new Array(); // 数组
let day = new Date(); // 时间
let show = function (){  // 函数
    console.log("方法")
}

// 通过js内置方法 typeof 可以输出数据对应的数据类型
// typeof 数据
// typeof(数据)
console.log( typeof 111); // number
console.log( typeof "字符串" ); // string
console.log( typeof(false) ); // boolean
console.log( typeof(null) ); // object
console.log( typeof(undefined) ); // undefined
console.log( typeof(NaN) ); // number
console.log( typeof(Infinity) ); // number
console.log( typeof(new Object()) ); // object
console.log( typeof(new Array()) ); // object
console.log( typeof(new Date()) ); // object
console.log( typeof( function(){} ) ); // function











